home *** CD-ROM | disk | FTP | other *** search
- {$X+,B-,V-}
- program SendHello;
-
- { Simple IPX demonstration program with 1 ESR.}
-
- uses crt,nwMisc,nwIPX;
-
- CONST IOSocket=$5678;
-
- Var NewStack :array[1..512] of word; { !! used by ESR }
- StackBottom:word; { !! used by ESR }
-
- SendEcb :Tecb;
- IpxHdr :TipxHeader;
- socket :word;
- dest :TinternetworkAddress;
- buf :array[1..546] of byte;
- t :byte;
- w :word;
- s :string;
- PacketSent :boolean;
-
- {$F+}
- Procedure SendESRhandler;
- begin
- PacketSent:=true;
- end;
- {$F-}
-
- {$F+}
- Procedure SendESR; assembler;
- asm { ES:SI are the only valid registers when entering this procedure ! }
- mov dx, seg stackbottom
- mov ds, dx
-
- mov dx,ss { setup of a new local stack }
- mov bx,sp { ss:sp copied to dx:bx}
- mov ax,ds
- mov ss,ax
- mov sp,offset stackbottom
- push bx
- push dx
-
- CALL SendEsrHandler
-
- pop dx
- pop bx
- mov sp,bx { restore stack }
- mov ss,dx
- end;
- {$F-}
-
- begin
- IF NOT IpxInitialize
- then begin
- writeln('Ipx needs to be installed.');
- halt(1);
- end;
- socket:=IOSocket;
- IF NOT IPXopenSocket(Socket,SHORT_LIVED_SOCKET)
- then begin
- writeln('IPXopenSocket returned error# ',nwIPX.result);
- halt(1);
- end;
-
- for t:=1 to 4 do dest.net[t]:=$00; { this net / segment }
- for t:=1 to 6 do dest.node[t]:=$FF; { all nodes }
- dest.socket:=IOsocket;
- w:=0;
-
- Repeat
- inc (w);
-
- { Fill buffer (ECB.fragment[2]^) }
- str(w:4,s);
- s:=s+' IPX: Hello World';
- FillChar(buf,546,#0);
- move(s[1],buf,ord(s[0]));
-
- { setup ECB and IPX header }
- PacketSent:=False;
- IPXsetupSendECB(Addr(SendESR),IOsocket,dest,@buf,ord(s[0]),
- IpxHdr,SendEcb);
- IPXsendPacket(SendEcb);
-
- REPEAT
-
- IpxRelinquishControl;
- delay(100);
-
- IF PacketSent
- then begin
- { ECB.InUseFlag was lowered, now determine if packet was sent: }
- CASE SendEcb.CompletionCode OF
- $00:writeln('IPX packet #',w:0,' was sent.');
- $FC:writeln('The send of packet #',w:0,' was canceled.');
- { impossible, as this cancelation to be done by THIS program, and it doesn't }
- $FD:writeln('Packet# ',w:0,' is malformed and was not sent.');
- { illegal param: packet length, number of fragments, fragment size. }
- $FE:writeln('Packet# ',w:0,' was undelivered. No stations listening.');
- $FF:writeln('Packet# ',w:0,' not sent due to a hardware error.');
- end;
- end;
-
- UNTIL PacketSent or Keypressed;
-
- delay(750); { delay 0.75 sec before sending another packet }
-
- UNTIL keypressed;
-
- IF NOT IPXcloseSocket(IOsocket)
- then writeln('IPXcloseSocket returned error# ',nwIPX.result);
-
- end.